package com.labot.webapp.action;



import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.security.core.context.SecurityContextHolder;

import com.labot.model.Area;
import com.labot.model.Centro;
import com.labot.model.ClasificacionMuestra;
import com.labot.model.PedidoNoConforme;
import com.labot.model.PedidoNoConformeBitacora;
import com.labot.model.User;
import com.labot.types.AuditType;
import com.labot.types.AvisoType;
import com.labot.types.BitacoraEventType;
import com.labot.types.ConstantsType;
import com.labot.types.EstadoPNMType;
import com.labot.types.MailType;
import com.labot.types.MuestraType;
import com.labot.types.ReclamoType;
import com.labot.types.SiNoType;
import com.labot.util.StackTraceUtils;
import com.labot.webapp.action.messages.TextMessagesType;
import com.labot.webapp.listener.StartupListener;


/**
 * Action for facilitating User Management feature.
 */
public class PedidoNoConformeAction extends BaseAction {
    private static final long serialVersionUID = 6776548938712115191L;
    
    private List<PedidoNoConforme> listaPedidosNoConforme;
    private Set<Area> areas = new HashSet<Area>();
    private List<ClasificacionMuestra> clasificaciones;
    private Set<PedidoNoConformeBitacora> bitacoras;
    Map<Integer,String> origenes = new HashMap<Integer,String>();
    private Map<Long,String> centros = new HashMap<Long, String>();
   
    private Long idarea;
    private Long idpedidonoconforme;
    private String origen;
    private String numeroprotocolo;
    private String nombre;
    private Long idareasolicita;
    private String determinacion;
    private Long idclasificacion;
    private String detalle;
    private PedidoNoConforme pedidonoconforme;
    private User logeado;
    private String urgente;
    private String tipomuestra;
    private String estado;
    private String areasnotificar;
    
    private String comentario;
    
    private String reclamo;
    private Date fechadesde;
    private Date fechahasta;
    private String nuevoprotocolo;
    
    
    Map<Long,String> comboareas = new HashMap<Long,String>();
    Map<Long,String> comboclasificaciones = new HashMap<Long,String>();
    private List<ReclamoType> reclamos = new ArrayList<ReclamoType>();
    private SiNoType[] sino = SiNoType.values();
    private MuestraType[] tipomuestras = MuestraType.values();
    private EstadoPNMType[] estados = EstadoPNMType.values();

    
    public String execute() {
        return SUCCESS;
    }
    
    public String cancel() {
    	return CANCEL;
    }


    /**
     * Fetch all Configs from database and put into local "configs" variable for retrieval in the UI.
     *
     * @return "success" if no exceptions thrown
     */
    
    public String input() {
    	return inputCombos(true);
    }
    
    public String inputCombos(Boolean nuevo) {
    	areas = areaManager.getAreas();
    	for (Area area : areas) {
			comboareas.put(area.getId(), area.getNombre());
		}
    	clasificaciones = clasificacionManager.getClasificacionMuestras();
    	for (ClasificacionMuestra c : clasificaciones) {
			comboclasificaciones.put(c.getId(), c.getNombre());
		}
    	
    	for (ReclamoType r : ReclamoType.values()) {
			reclamos.add(r);
		}
    	for (Centro c : centroManager.getCentros()) {
			origenes.put(c.getOrigen(), c.getNombre());
		}
    	
    	if (nuevo) {    		
    		try{
    			User s = userManager.getUserByUsername(SecurityContextHolder.getContext().getAuthentication().getName());
    			idareasolicita = s.getArea().getId();
    		}catch(Exception e){
    			super.addActionError("Error al buscar el area del usuario!");
    		}
    	}
    	
    	
    	
    	return SUCCESS;
    }
    
    public String list(){
    	
    	areas = areaManager.getAreas();
    	for (Area area : areas) {
			comboareas.put(area.getId(), area.getNombre());
		}
    	for (ReclamoType r : ReclamoType.values()) {
			reclamos.add(r);
		}
    	clasificaciones = clasificacionManager.getClasificacionMuestras();
    	for (ClasificacionMuestra c : clasificaciones) {
			comboclasificaciones.put(c.getId(), c.getNombre());
		}
    	if(fechahasta != null){
    		Calendar cal = Calendar.getInstance();
    		cal.setTime(fechahasta);
    		cal.set(Calendar.HOUR, 23);
    		cal.set(Calendar.MINUTE, 59);
    		cal.set(Calendar.SECOND, 59);
    		fechahasta = cal.getTime();
    		
    	}
    	
    	listaPedidosNoConforme = pedidonoconformeManager.getFiltrados(idareasolicita, reclamo, estado, urgente,
    			tipomuestra,idclasificacion,fechadesde,fechahasta,numeroprotocolo);
    	
    	return SUCCESS;
    }
    
    public String save(){
    	
    	//Comprobaciones
    	if(urgente == null || urgente.equals("-1")){
    		super.addActionError("Debe especificar si el pedido es urgente o no!");
    		this.inputCombos(false);
    		return INPUT;
    	}
    	
    	if(idareasolicita == null || idareasolicita.equals("")){
    		super.addActionError("Debe especificar que area solicita el pedido!");
    		this.inputCombos(false);
    		return INPUT;
    	}
    	if(idclasificacion == null || idclasificacion.equals("")){
    		super.addActionError("Debe especificar una clasificacion de la muestra!");
    		this.inputCombos(false);
    		return INPUT;
    	}
    	if(reclamo == null || reclamo.equals("-1")){
    		super.addActionError("Debe especificar un tipo de reclamo!");
    		this.inputCombos(false);
    		return INPUT;
    	}
    	if(!numeroprotocolo.matches("[0-9]+")){
    		super.addActionWarning("Los protocolos deben ser solo numeros!");
    		this.inputCombos(false);
    		return INPUT;
    	}
    	if(!(numeroprotocolo.length() == 10)){
    		super.addActionError("Los protocolos deben tener 10 numeros (3 de origen y 7 de numero de protocolo SIN GUION)");
    		this.inputCombos(false);
    		return INPUT;
    	}
    	
    	if(Integer.parseInt(origen) == -1){
    		super.addActionWarning("Por favor seleccione un centro!");
    		this.inputCombos(false);
    		return INPUT;
    	}
    	
    	
    	if(tipomuestra.equals("-1")){
    		super.addActionWarning("Debe seleccionar un tipo de muestra!");
    		this.inputCombos(false);
    		return INPUT;
    	}
    	
    	if(idclasificacion.equals(-1)){
    		super.addActionWarning("Debe seleccionar un motivo!");
    		this.inputCombos(false);
    		return INPUT;
    	}
    	
    	//Buscar si ya existe el NMC para ese protocolo
    	
    	PedidoNoConforme check = pedidonoconformeManager.getNuevaMuestraPorProtocolo(numeroprotocolo);
    	
    	if(check == null){
    			
    	
    	
    	PedidoNoConforme nm = new PedidoNoConforme();
    	Area s = null;
    	try{
    		s = areaManager.buscarArea(idareasolicita);
    	}catch(Exception e){
    		super.addActionError("Error Grave! no se encontro el area.");
    		return ERROR;
    	}
    	nm.setAreasolicita(s);
    	areas.add(s);
    	nm.setAreas(areas);
    	
    	
    	
		if (areasnotificar != null) {
			String[] separador = null;
			separador = areasnotificar.split(",");

			Set<Area> areasanotificar = new HashSet<Area>();

			for (String ss : separador) {
				ss.trim();
				String f = ss.replaceAll(" ", "");
				Area x = areaManager.buscarArea(Long.parseLong(f));
				areasanotificar.add(x);
			}

			nm.setAreasnotificadas(areasanotificar);
		}
    	
    	ClasificacionMuestra c = null;
    	try{
    		c = clasificacionManager.buscarClasificacionMuestra(idclasificacion);
    	}catch(Exception e){
    		super.addActionError("Error Grave! no se encontro la clasificacion");
    		return ERROR;
    	}
    	nm.setClasificacion(c);
    	nm.setDetalle(detalle);
    	nm.setDeterminacion(determinacion);
    	nm.setFecha(new Date());
    	nm.setNombrepaciente(nombre);
    	nm.setNumeroprotocolo(numeroprotocolo);
    	nm.setTipomuestra(MuestraType.valueOf(tipomuestra));
    	Centro f = centroManager.buscarCentroPorOrigen(Integer.parseInt(origen));
    	nm.setCentro(f);
    	if(urgente.equals(SiNoType.NO.toString())){
    		nm.setUrgente(SiNoType.NO);
    		if(areasnotificar == null){
    			nm.setEstadopnm(EstadoPNMType.EN_PROCESO);
    			PedidoNoConformeBitacora b = new PedidoNoConformeBitacora();
    			b.setFecha(new Date());
    			b.setEvento(BitacoraEventType.CARGAS_COMPLETAS);
    			b.setDescripcion("<strong>ESTADO: " + nm.getEstadopnm() + " -></strong> Pedido escalado automaticamente a FIRMAS.");
    			b.setUsername("SISTEMA");
    			nm.agregarBitacora(b);
    		}else{
				nm.setEstadopnm(EstadoPNMType.REGISTRADO);
    		}
    	}else{
    		nm.setUrgente(SiNoType.SI);
    		nm.setEstadopnm(EstadoPNMType.EN_PROCESO);
    	}
    	if(nm.getUrgente().equals(SiNoType.SI)){
    		PedidoNoConformeBitacora b = new PedidoNoConformeBitacora();
        	b.setFecha(new Date());
        	b.setEvento(BitacoraEventType.URGENTE);
        	b.setDescripcion("<strong>ESTADO: " + nm.getEstadopnm() + " -></strong> Pedido urgente, escalado automaticamente a FIRMAS.");
        	b.setUsername("SISTEMA");
        	nm.agregarBitacora(b);
    	}
    	String personadetecta = null;
    	try{
    		personadetecta = SecurityContextHolder.getContext().getAuthentication().getName();
    	}catch(Exception e){
    		super.addActionError("Error Grave! No se encontro a la persona");
    		return ERROR;
    	}
    	nm.setPersonadetecta(personadetecta);
    	nm.setReclamo(ReclamoType.valueOf(reclamo));
    	PedidoNoConformeBitacora bitacora = new PedidoNoConformeBitacora();
    	bitacora.setFecha(new Date());
    	bitacora.setEvento(BitacoraEventType.CREACION);
    	bitacora.setDescripcion("<strong>ESTADO: " + nm.getEstadopnm() + " -></strong> Area que solicita: " + nm.getAreasolicita().getNombre());
    	bitacora.setUsername(personadetecta);
    	nm.agregarBitacora(bitacora);
    	try{
    		pedidonoconformeManager.save(nm);
    		if(nm.getUrgente().equals(SiNoType.NO)){
    			try {
    				//Mail
    				Map<String, String> props = new HashMap<String, String>();
    				props.put("areasolicita", nm.getAreasolicita().getNombre());
    				props.put("origen", nm.getCentro().getNombre().toString());
    				props.put("numeroprotocolo", nm.getNumeroprotocolo().toString());
    				props.put("nombrepaciente", nm.getNombrepaciente());
    				props.put("urgente", "diferido");
    			
    				
    				if(nm.getAreasnotificadas() != null){
	    				for (Area m : nm.getAreasnotificadas()) {
	    					mailEngine.sendMail(MailType.INFORME_AREAS, m.getMail() , null, props, null, super.getLocale());
						}
    				}else{
    					mailEngine.sendMail(MailType.INFORME_FIRMAS, StartupListener.getConfigValue(ConstantsType.MAIL_FIRMAS) , null, props, null, super.getLocale());
    				}
    				
    				
    				super.log(AuditType.INFO, "Se genero un nuevo pedido de no conformidad para el protocolo " + nm.getNumeroprotocolo() + ".");

    			} catch (Exception e) {
    				log.error(StackTraceUtils.getStackTrace(e));
    				super.addActionWarning("Error al mandar el mail , pero el pedido fue generado.");
    	    		return ERROR;
    			}
    		}else{
    			
    			try {
    				//Mail
    				Map<String, String> props = new HashMap<String, String>();
    				props.put("areasolicita", nm.getAreasolicita().getNombre());
    				props.put("origen", nm.getCentro().getNombre().toString());
    				props.put("numeroprotocolo", nm.getNumeroprotocolo().toString());
    				props.put("nombrepaciente", nm.getNombrepaciente());
    				props.put("urgente", "urgente");
    				if(nm.getAreasnotificadas() != null){
						for (Area m : nm.getAreasnotificadas()) {
							mailEngine.sendMail(MailType.INFORME_AREAS_URGENTE, m.getMail(), null, props, null, super.getLocale());
						}
    				}
    				mailEngine.sendMail(MailType.INFORME_FIRMAS, StartupListener.getConfigValue(ConstantsType.MAIL_FIRMAS) , null, props, null, super.getLocale());
    				
    				
    				super.log(AuditType.INFO, "Se genero un nuevo pedido de no conformidad para el protocolo " + nm.getNumeroprotocolo() + " urgente!.");

    			} catch (Exception e) {
    				log.error(StackTraceUtils.getStackTrace(e));
    				super.addActionWarning("Error al mandar el mail , pero el pedido fue generado.");
    	    		return ERROR;
    			}
    			
    		}
    		
    	}catch(Exception e){
    		super.addActionError("Error al guardar la muestra!");
    		return ERROR;
    	}
    	
    	super.addActionMessage("Se creo el pedido de nueva muestra correctamente!");
    	
    	}else{
    		if(check.getEstadopnm().equals(EstadoPNMType.REGISTRADO)){
    			super.addActionError("ERROR! Actualmente ya se encuentra un NMC en estado registrado para ese numero de protocolo verifique en la lista y consulte a su supervisor.");
    			return ERROR;
    		}
    		if(check.getEstadopnm().equals(EstadoPNMType.EN_PROCESO)){
    			super.addActionError("ERROR! Actualmente ya se encuentra un NMC en proceso para ese numero de protocolo. El pedido se encuentra en firmas. Consulte a su supervisor.");
    			return ERROR;
    		}
    		if(check.getEstadopnm().equals(EstadoPNMType.AVISADO)){
    			super.addActionError("ERROR! Actualmente ya se encuentra un NMC en estado avisado para ese numero de protocolo.  El paciente ya fue avisado. Consulte a su supervisor.");
    			return ERROR;
    		}
    		if(check.getEstadopnm().equals(EstadoPNMType.CERRADO)){
    			super.addActionError("ERROR! Ya se registro un NMC para ese numero de protocolo.   El pedido ya fue cerrado, por favor contacte a su supervisor.");
    			return ERROR;
    		}
    		if(check.getEstadopnm().equals(EstadoPNMType.ANULADO)){
    			super.addActionError("ERROR! Ya se registro un NMC para ese numero de protocolo. El pedido fue anulado, por favor contacte a su supervisor.");
    			return ERROR;
    		}
    	}
    	return SUCCESS;
    }
    
    public String saveSupervisor(){
    	try{
    	pedidonoconforme = pedidonoconformeManager.buscarNuevaMuestra(idpedidonoconforme);
    	PedidoNoConformeBitacora b = new PedidoNoConformeBitacora();
    	b.setFecha(new Date());
    	b.setEvento(BitacoraEventType.MODIFICO_SUPERVISOR);
    	b.setDescripcion("<strong>ESTADO: " + pedidonoconforme.getEstadopnm() + " -></strong> "  + comentario);
    	b.setUsername(SecurityContextHolder.getContext().getAuthentication().getName());
    	pedidonoconforme.setDeterminacion(determinacion);
    	pedidonoconforme.agregarBitacora(b);
    	pedidonoconformeManager.save(pedidonoconforme);
    	}catch(Exception e){
    		super.addActionError("Error al editar el pedido!");
    		return ERROR;
    	}
    	super.addActionMessage("Se edito el pedido correctamente!");
    	return SUCCESS;
    }
    
    public String listarAnalitico(){
    	
    	
    	listaPedidosNoConforme = pedidonoconformeManager.getNuevaMuestrasRegistradoNoUrgentes();
    	for (PedidoNoConforme p : listaPedidosNoConforme) {
			p.getAreasnotificadas().removeAll(p.getAreas());
		}
    	
    	
    	return SUCCESS;
    }
    
    
    public String updateArea(){
    	Area a = null;
    	try{
    	pedidonoconforme = pedidonoconformeManager.buscarNuevaMuestra(idpedidonoconforme);
    	if(idarea == null){
    		super.addActionError("No se actualizo el pedido... Por favor debe seleccionar al menos un area!");
    		return verPedidoAnalitico();
    	}
    	a = areaManager.buscarArea(idarea);
    	}catch(Exception e){
    		super.addActionError("Error al actualizar el pedido. No se encontro el pedido o el area.");
    		return ERROR;
    	}
    	pedidonoconforme.agregarArea(a);
    	PedidoNoConformeBitacora bitacora = new PedidoNoConformeBitacora();
    	bitacora.setFecha(new Date());
    	bitacora.setEvento(BitacoraEventType.ACTUALIZACION);
    	bitacora.setDescripcion("<strong>ESTADO: " + pedidonoconforme.getEstadopnm() + " -></strong>  El area de '" + a.getNombre() + "' reviso y confirmo el pedido.");
    	bitacora.setUsername(SecurityContextHolder.getContext().getAuthentication().getName());
    	pedidonoconforme.agregarBitacora(bitacora);
    	
    	bitacoras = pedidonoconforme.getBitacoras();
    	areas = pedidonoconforme.getAreasnotificadas();
    	areas.removeAll(pedidonoconforme.getAreas());
    	
    	
    	if(areas.isEmpty()){
    		pedidonoconformeManager.save(pedidonoconforme);
    		pedidonoconforme.setEstadopnm(EstadoPNMType.EN_PROCESO);
    		PedidoNoConformeBitacora cierre = new PedidoNoConformeBitacora();
    		cierre.setFecha(new Date());
    		cierre.setEvento(BitacoraEventType.CARGAS_COMPLETAS);
    		cierre.setDescripcion("<strong>ESTADO: " + pedidonoconforme.getEstadopnm() + " -></strong> Se completo la carga de areas. Pedido escalado a firmas.");
    		cierre.setUsername("SISTEMA");
        	pedidonoconforme.agregarBitacora(cierre);
    		
    	}	
    	
    	pedidonoconformeManager.save(pedidonoconforme);
    	if(areas.isEmpty()){
    		try {
				//Mail
				Map<String, String> props = new HashMap<String, String>();
				props.put("areasolicita", pedidonoconforme.getAreasolicita().getNombre());
				props.put("origen", pedidonoconforme.getCentro().getNombre().toString());
				props.put("numeroprotocolo", pedidonoconforme.getNumeroprotocolo().toString());
				props.put("nombrepaciente", pedidonoconforme.getNombrepaciente());
				if(pedidonoconforme.getUrgente().equals(SiNoType.NO))
					props.put("urgente", "diferido");
				else
					props.put("urgente", "urgente");
				mailEngine.sendMail(MailType.INFORME_FIRMAS, StartupListener.getConfigValue(ConstantsType.MAIL_FIRMAS) , null, props, null, super.getLocale());
    		}catch(Exception e){
    			log.error(StackTraceUtils.getStackTrace(e));
				super.addActionWarning("Error al mandar el mail , pero el pedido fue actualizado.");
	    		return ERROR;
    		}
    	}
    	determinacion = pedidonoconforme.getDeterminacion();
    	super.addActionMessage("Se actualizo el area " + a.getNombre() + "!");
    	return SUCCESS;
    	
    }
    
    public String agregarDeterminacion(){
    	pedidonoconforme = pedidonoconformeManager.buscarNuevaMuestra(idpedidonoconforme);
    	String vieja = pedidonoconforme.getDeterminacion();
    	String nueva = determinacion;
    	areas = pedidonoconforme.getAreasnotificadas();
    	areas.removeAll(pedidonoconforme.getAreas());
    	bitacoras = pedidonoconforme.getBitacoras();
    	logeado = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    	if(determinacion != null && !determinacion.equals("")){
			pedidonoconforme.setDeterminacion(determinacion);
    	}else{
    		super.addActionError("La determinacion no puede estar vacia!");
			return ERROR;
    	}
    	PedidoNoConformeBitacora b = new PedidoNoConformeBitacora();
    	b.setFecha(new Date());
    	b.setEvento(BitacoraEventType.MODIFICO_VALOR);
    	b.setDescripcion("<strong>ESTADO: " + pedidonoconforme.getEstadopnm() + " -></strong> Determinacion modificada del antiguo valor '" + vieja + "' al nuevo valor '" + nueva + "'.");
    	b.setUsername(SecurityContextHolder.getContext().getAuthentication().getName());
    	pedidonoconforme.agregarBitacora(b);
		pedidonoconformeManager.save(pedidonoconforme);
		super.addActionMessage("Determinacion modificada correctamente!");
		return SUCCESS;
    }
    
    public String verPedidoAnalitico(){
    	
    	pedidonoconforme = pedidonoconformeManager.buscarNuevaMuestra(idpedidonoconforme);
    	areas = pedidonoconforme.getAreasnotificadas();
    	areas.removeAll(pedidonoconforme.getAreas());
    	logeado = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    	bitacoras = pedidonoconforme.getBitacoras();
    	determinacion = pedidonoconforme.getDeterminacion();
    	return SUCCESS;
    }
    
    public String verPedido(){
    	pedidonoconforme = pedidonoconformeManager.buscarNuevaMuestra(idpedidonoconforme);
    	areas = pedidonoconforme.getAreasnotificadas();
    	areas.removeAll(pedidonoconforme.getAreas());
    	logeado = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
		bitacoras = pedidonoconforme.getBitacoras();
		determinacion = pedidonoconforme.getDeterminacion();
		List<Centro> cc = centroManager.getCentros();
		for (Centro centro : cc) {
			centros.put(centro.getId(), centro.getNombre());
		}
		
    	return SUCCESS;
    }
    
    public String imprimir(){
    	try{
    	pedidonoconforme = pedidonoconformeManager.buscarNuevaMuestra(idpedidonoconforme);
    	}catch(Exception e){
    		super.addActionError("Error al querer imprimir el pedido!");
    		return ERROR;
    	
    	}
    	return SUCCESS;
    }
    

	

	public List<PedidoNoConforme> getListaPedidosNoConforme() {
		return listaPedidosNoConforme;
	}

	public void setListaPedidosNoConforme(
			List<PedidoNoConforme> listaPedidosNoConforme) {
		this.listaPedidosNoConforme = listaPedidosNoConforme;
	}

	public PedidoNoConforme getPedidonoconforme() {
		return pedidonoconforme;
	}

	public void setPedidonoconforme(PedidoNoConforme pedidonoconforme) {
		this.pedidonoconforme = pedidonoconforme;
	}

	public Set<Area> getAreas() {
		return areas;
	}

	public void setAreas(Set<Area> areas) {
		this.areas = areas;
	}

	public Long getIdpedidonoconforme() {
		return idpedidonoconforme;
	}

	public void setIdpedidonoconforme(Long idpedidonoconforme) {
		this.idpedidonoconforme = idpedidonoconforme;
	}

	public String getOrigen() {
		return origen;
	}

	public void setOrigen(String origen) {
		this.origen = origen;
	}

	public String getNumeroprotocolo() {
		return numeroprotocolo;
	}

	public void setNumeroprotocolo(String numeroprotocolo) {
		this.numeroprotocolo = numeroprotocolo;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Long getIdareasolicita() {
		return idareasolicita;
	}

	public void setIdareasolicita(Long idareasolicita) {
		this.idareasolicita = idareasolicita;
	}


	public String getDeterminacion() {
		return determinacion;
	}

	public void setDeterminacion(String determinacion) {
		this.determinacion = determinacion;
	}

	public Long getIdclasificacion() {
		return idclasificacion;
	}

	public void setIdclasificacion(Long idclasificacion) {
		this.idclasificacion = idclasificacion;
	}

	public String getDetalle() {
		return detalle;
	}

	public void setDetalle(String detalle) {
		this.detalle = detalle;
	}

	public Map<Long, String> getComboareas() {
		return comboareas;
	}

	public void setComboareas(Map<Long, String> comboareas) {
		this.comboareas = comboareas;
	}

	public Map<Long, String> getComboclasificaciones() {
		return comboclasificaciones;
	}

	public void setComboclasificaciones(Map<Long, String> comboclasificaciones) {
		this.comboclasificaciones = comboclasificaciones;
	}

	public List<ClasificacionMuestra> getClasificaciones() {
		return clasificaciones;
	}

	public void setClasificaciones(List<ClasificacionMuestra> clasificaciones) {
		this.clasificaciones = clasificaciones;
	}

	public List<ReclamoType> getReclamos() {
		return reclamos;
	}

	public void setReclamos(List<ReclamoType> reclamos) {
		this.reclamos = reclamos;
	}

	public String getReclamo() {
		return reclamo;
	}

	public void setReclamo(String reclamo) {
		this.reclamo = reclamo;
	}

	public PedidoNoConforme getNuevamuestra() {
		return pedidonoconforme;
	}

	public void setNuevamuestra(PedidoNoConforme pedidonoconforme) {
		this.pedidonoconforme = pedidonoconforme;
	}

	public User getLogeado() {
		return logeado;
	}

	public void setLogeado(User logeado) {
		this.logeado = logeado;
	}

	public Long getIdarea() {
		return idarea;
	}

	public void setIdarea(Long idarea) {
		this.idarea = idarea;
	}

	public Set<PedidoNoConformeBitacora> getBitacoras() {
		return bitacoras;
	}

	public void setBitacoras(Set<PedidoNoConformeBitacora> bitacoras) {
		this.bitacoras = bitacoras;
	}

	public String getUrgente() {
		return urgente;
	}

	public void setUrgente(String urgente) {
		this.urgente = urgente;
	}

	public SiNoType[] getSino() {
		return sino;
	}

	public void setSino(SiNoType[] sino) {
		this.sino = sino;
	}
	
	

	public Map<Integer, String> getOrigenes() {
		return origenes;
	}

	public void setOrigenes(Map<Integer, String> origenes) {
		this.origenes = origenes;
	}

	public MuestraType[] getTipomuestras() {
		return tipomuestras;
	}

	public void setTipomuestras(MuestraType[] tipomuestras) {
		this.tipomuestras = tipomuestras;
	}

	public String getTipomuestra() {
		return tipomuestra;
	}

	public void setTipomuestra(String tipomuestra) {
		this.tipomuestra = tipomuestra;
	}

	public EstadoPNMType[] getEstados() {
		return estados;
	}

	public void setEstados(EstadoPNMType[] estados) {
		this.estados = estados;
	}

	public Date getFechadesde() {
		return fechadesde;
	}

	public void setFechadesde(Date fechadesde) {
		this.fechadesde = fechadesde;
	}

	public Date getFechahasta() {
		return fechahasta;
	}

	public void setFechahasta(Date fechahasta) {
		this.fechahasta = fechahasta;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getAreasnotificar() {
		return areasnotificar;
	}

	public void setAreasnotificar(String areasnotificar) {
		this.areasnotificar = areasnotificar;
	}

	public String getComentario() {
		return comentario;
	}

	public void setComentario(String comentario) {
		this.comentario = comentario;
	}

	public String getNuevoprotocolo() {
		return nuevoprotocolo;
	}

	public void setNuevoprotocolo(String nuevoprotocolo) {
		this.nuevoprotocolo = nuevoprotocolo;
	}
    
	
    
	

	
	

}
